{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "smoking-optics",
   "metadata": {},
   "source": [
    "# Involute-King-He Model\n",
    "**\"何卷王\"模型**\n",
    "\n",
    "Conv+Recur"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "vanilla-dynamics",
   "metadata": {},
   "source": [
    "## import dependency and prepare dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "nominated-valuable",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch import nn,optim\n",
    "from torch.nn import functional as F, Sequential as Seq, Module\n",
    "from torchvision import datasets,transforms\n",
    "from torch.utils.data import Dataset,DataLoader\n",
    "from torch.autograd import Variable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "pending-outdoors",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data_transformer = transforms.Compose(\n",
    "    [\n",
    "     transforms.RandomGrayscale(),\n",
    "     transforms.ToTensor()\n",
    "    ])\n",
    "\n",
    "train_data = datasets.MNIST(\n",
    "    root=\"data\",\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=train_data_transformer\n",
    ")\n",
    "\n",
    "\n",
    "test_data = datasets.MNIST(\n",
    "    root=\"data\",\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=transforms.ToTensor()\n",
    ")\n",
    "\n",
    "batch_size = 100\n",
    "\n",
    "train_dataloader = DataLoader(train_data, batch_size=batch_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "excited-region",
   "metadata": {},
   "source": [
    "## build model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "least-midnight",
   "metadata": {},
   "outputs": [],
   "source": [
    "h_state = torch.zeros(2,100,10)\n",
    "\n",
    "class Net(Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv = Seq(\n",
    "            # 1@28x28\n",
    "            nn.Conv2d(1,8,3),\n",
    "            # 8@26x26\n",
    "            nn.Conv2d(8,16,3),\n",
    "            # 16@24x24\n",
    "            nn.MaxPool2d(2,2),\n",
    "            # 16@12x12\n",
    "            nn.BatchNorm2d(16),\n",
    "            nn.ReLU(),\n",
    "            # 16@12x12\n",
    "            nn.Conv2d(16,32,3),\n",
    "            # 32@10x10\n",
    "            nn.Conv2d(32,64,3),\n",
    "            # 64@8x8\n",
    "            nn.MaxPool2d(2,2),\n",
    "            # 64@4x4\n",
    "            nn.BatchNorm2d(64),\n",
    "            nn.ReLU()\n",
    "            # 64@4x4\n",
    "        )\n",
    "        self.rnn = nn.RNN(4 * 64, 10,num_layers=2,batch_first=True,dropout=.3)\n",
    "    \n",
    "    def forward(self,x,h_state):\n",
    "        h_state=Variable(h_state)\n",
    "        x = self.conv(x)\n",
    "        x = x.permute(0,2,3,1)\n",
    "        x = x.reshape(-1, 4, 4 * 64)\n",
    "        x,h_state = self.rnn(x,h_state)\n",
    "        return F.softmax(x,dim=1)[:,-1,:],h_state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cutting-optimum",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(dataloader, model, loss_fn, optimizer,h_state):\n",
    "    size = len(dataloader.dataset)\n",
    "    model.train()\n",
    "    for batch, (X, y) in enumerate(dataloader):\n",
    "        pred,h_state = model(X,h_state)\n",
    "        \n",
    "        h_state = h_state.data\n",
    "        loss = loss_fn(pred, y)\n",
    "\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        if batch % 100 == 0:\n",
    "            loss, current = loss.item(), batch * len(X)\n",
    "            print(f\"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]\")\n",
    "            \n",
    "def test(model,test_data,loss_fn,h_state):\n",
    "    test_dataloader = DataLoader(test_data,batch_size=batch_size)\n",
    "    n = len(test_dataloader)*batch_size\n",
    "    model.eval()\n",
    "    loss,correct = 0,0\n",
    "    with torch.no_grad():\n",
    "        for data,gt in test_dataloader:\n",
    "            pred,h_state = model(data,h_state)\n",
    "            loss += loss_fn(pred,gt).item()\n",
    "            correct += sum(pred.argmax(dim=1)==gt).item()\n",
    "    return correct/n,loss/n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "unnecessary-silence",
   "metadata": {},
   "outputs": [],
   "source": [
    "net = Net()\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.Adam(net.parameters())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "strategic-behavior",
   "metadata": {},
   "source": [
    "## Train the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "broke-journalism",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1\n",
      "-------------------------------\n",
      "loss: 2.318748  [    0/60000]\n",
      "loss: 2.021793  [10000/60000]\n",
      "loss: 1.972710  [20000/60000]\n",
      "loss: 1.947276  [30000/60000]\n",
      "loss: 1.908777  [40000/60000]\n",
      "loss: 1.899460  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 94.2%, Avg loss: 0.018570 \n",
      "\n",
      "Epoch 2\n",
      "-------------------------------\n",
      "loss: 1.879498  [    0/60000]\n",
      "loss: 1.874078  [10000/60000]\n",
      "loss: 1.885179  [20000/60000]\n",
      "loss: 1.872827  [30000/60000]\n",
      "loss: 1.850473  [40000/60000]\n",
      "loss: 1.842041  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 95.7%, Avg loss: 0.018196 \n",
      "\n",
      "Epoch 3\n",
      "-------------------------------\n",
      "loss: 1.846538  [    0/60000]\n",
      "loss: 1.850038  [10000/60000]\n",
      "loss: 1.844058  [20000/60000]\n",
      "loss: 1.844538  [30000/60000]\n",
      "loss: 1.836471  [40000/60000]\n",
      "loss: 1.825416  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 96.4%, Avg loss: 0.018074 \n",
      "\n",
      "Epoch 4\n",
      "-------------------------------\n",
      "loss: 1.833519  [    0/60000]\n",
      "loss: 1.833354  [10000/60000]\n",
      "loss: 1.848233  [20000/60000]\n",
      "loss: 1.840853  [30000/60000]\n",
      "loss: 1.830395  [40000/60000]\n",
      "loss: 1.811410  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 96.8%, Avg loss: 0.017996 \n",
      "\n",
      "Epoch 5\n",
      "-------------------------------\n",
      "loss: 1.820545  [    0/60000]\n",
      "loss: 1.829134  [10000/60000]\n",
      "loss: 1.836817  [20000/60000]\n",
      "loss: 1.823042  [30000/60000]\n",
      "loss: 1.813137  [40000/60000]\n",
      "loss: 1.819394  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.2%, Avg loss: 0.017922 \n",
      "\n",
      "Epoch 6\n",
      "-------------------------------\n",
      "loss: 1.814709  [    0/60000]\n",
      "loss: 1.814644  [10000/60000]\n",
      "loss: 1.832176  [20000/60000]\n",
      "loss: 1.822033  [30000/60000]\n",
      "loss: 1.812201  [40000/60000]\n",
      "loss: 1.812151  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.4%, Avg loss: 0.017857 \n",
      "\n",
      "Epoch 7\n",
      "-------------------------------\n",
      "loss: 1.811102  [    0/60000]\n",
      "loss: 1.811368  [10000/60000]\n",
      "loss: 1.826364  [20000/60000]\n",
      "loss: 1.806091  [30000/60000]\n",
      "loss: 1.801822  [40000/60000]\n",
      "loss: 1.797246  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.2%, Avg loss: 0.017844 \n",
      "\n",
      "Epoch 8\n",
      "-------------------------------\n",
      "loss: 1.816405  [    0/60000]\n",
      "loss: 1.813506  [10000/60000]\n",
      "loss: 1.819144  [20000/60000]\n",
      "loss: 1.809272  [30000/60000]\n",
      "loss: 1.809829  [40000/60000]\n",
      "loss: 1.799428  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.4%, Avg loss: 0.017805 \n",
      "\n",
      "Epoch 9\n",
      "-------------------------------\n",
      "loss: 1.810443  [    0/60000]\n",
      "loss: 1.809709  [10000/60000]\n",
      "loss: 1.819235  [20000/60000]\n",
      "loss: 1.807207  [30000/60000]\n",
      "loss: 1.801241  [40000/60000]\n",
      "loss: 1.798822  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 97.3%, Avg loss: 0.017803 \n",
      "\n",
      "Epoch 10\n",
      "-------------------------------\n",
      "loss: 1.803499  [    0/60000]\n",
      "loss: 1.820248  [10000/60000]\n",
      "loss: 1.814187  [20000/60000]\n",
      "loss: 1.799582  [30000/60000]\n",
      "loss: 1.793894  [40000/60000]\n",
      "loss: 1.799860  [50000/60000]\n",
      "Test Error: \n",
      " Accuracy: 96.8%, Avg loss: 0.017809 \n",
      "\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "epochs = 10\n",
    "for epoch in range(epochs):\n",
    "    print(f\"Epoch {epoch+1}\\n-------------------------------\")\n",
    "    train(train_dataloader, net, criterion, optimizer,h_state)\n",
    "    correct,loss = test(net,test_data,criterion,h_state)\n",
    "    print(f\"Test Error: \\n Accuracy: {(100*correct):>0.1f}%, Avg loss: {loss:>8f} \\n\")\n",
    "#     correct,loss = test(net,train_data,criterion)\n",
    "#     print(f\"Train Error: \\n Accuracy: {(100*correct):>0.1f}%, Avg loss: {loss:>8f} \\n\")\n",
    "print(\"Done!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "indie-duplicate",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "\n",
       "        if (window._pyforest_update_imports_cell) { window._pyforest_update_imports_cell('import matplotlib.pyplot as plt'); }\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/javascript": [
       "\n",
       "        if (window._pyforest_update_imports_cell) { window._pyforest_update_imports_cell('import matplotlib.pyplot as plt'); }\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 36 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cnums = 9\n",
    "rnums = 4\n",
    "fig,axes = plt.subplots(rnums,cnums)\n",
    "for i,(X,y) in enumerate(DataLoader(test_data,batch_size = 1,shuffle=True)):\n",
    "    r =int(i / cnums)\n",
    "    c = i % cnums\n",
    "    if r >= rnums:\n",
    "        break\n",
    "    axes[r][c].imshow(X.view(28,28),cmap='Greens')\n",
    "    axes[r][c].get_xaxis().set_visible(False)\n",
    "    axes[r][c].get_yaxis().set_visible(False)\n",
    "    result,_ = net(X,h_state[:,0:1,:])\n",
    "    axes[r][c].set_title(f'pred:{result.argmax(dim=1).item()}')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
